package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 常用的元注解
 * @Target:用于指明当前注解可以被应用的位置，具体位置由ElementType表示
 *         ElementType.TYPE:注解可以被应用在类上，接口上
 *         ElementType.FIELD:注解可以被应用在成员变量上
 *         ElementType.METHOD:注解可以被应用在方法上
 *         ElementType.CONSTRUCTOR:注解可以被应用在构造方法上
 *         ElementType.PARAMETER:注解可以被应用在方法参数上
 *         例如:当前注解只能在类上使用时:
 *         @Target(ElementType.TYPE)
 *         如果在多个地方可以使用，要以数组形式指明
 *         @Target({ElementType.TYPE,ElementType.FIELD})
 *
 * @Retention:用于指明当前注解被保留的时间长短
 *          RetentionPolicy.SOURCE:注解只在源文件中有效，编译器将丢弃它
 *          RetentionPolicy.CLASS:注解在class文件中有(默认的保留级别)
 *          RetentionPolicy.RUNTIME:注解在class文件中有效并且可被反射机制访问
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {
}
